package com.kedacom.ctsp.authz;

import com.kedacom.ctsp.authz.entity.AuthRole;

import java.lang.annotation.*;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Authorize {

    /**
     * Returns the list of security configuration attributes (e.g. shelf, device).
     * should has anyone of the list
     * if null , use ( ${classAuthorize.resources}_${方法名})
     *
     * @return String[] The secure method attributes
     */
    String[] resources() default {};

    /**
     * 控制角色访问
     * should has anyone of the list
     *
     * @return 要控制的角色id集合
     * @see AuthRole#getSign()
     * @see com.kedacom.ctsp.authz.entity.Authentication#hasRole(String)
     */
    String[] roles() default {};

    /**
     * @return 当无权限时, 返回的消息
     */
    String message() default "无权限访问";

    /**
     * 是否需要进行数据层面的权限校验
     */
    boolean dataAccess() default true;

    /**
     * 按照哪个字段进行用户级别的数据控制
     * dataAccess=true的时候才起作用
     *
     * @return
     */
    String[] creatorColumn() default {};

    /**
     * 按照哪个字段进行部门级别的数据控制
     * dataAccess=true的时候才起作用
     *
     * @return
     */
    String[] departmentColumn() default {};
}

